A variety of approaches to providing remote access to applications exist. In one approach, using X Windows, an application running on a first computing system can display a graphical window on a second computing system. Mouse-clicks, keystrokes, and other input events made by a user of the second computing system are forwarded to the first computing system. The application executing on the first computing system uses the display of the second computing system as its display—it does not display its window(s) on the first computing system.
The X Windows approach suffers from a number of drawbacks, including the requirement that the second computing system include a relatively complex and frequently difficult to configure piece of software, the X Server. In addition, initiating execution of a program is typically a multi-step, manual process. The user of the second computing system first manually logs on (e.g., via TELNET or SSH) to the first computing system, and configures the first computing system to use the second computing system as a display device. Then, the user configures the second computing system to allow the first computing system to use the second computing system as a display. Next, the user returns to the first computing system and executes the desired application, which then presents its window on the second computing system.
In another approach, VNC (“Virtual Network Computing”), a server executing on a first computing system transmits image data from the frame buffer of the first computing system to a second (client) computing system for display. VNC suffers from a number of drawbacks, including the requirement to install a special-purpose client application on the second computing system. In addition, VNC is limited to displaying the entire display of the first computing system, which is typically an entire operating system user interface (e.g., a desktop). VNC cannot distinguish between, or separately present or manage, different application windows. Furthermore, launching an application on the first computing system requires a multi-step manual process including: the user of the second computing system recalling the name or identifier of the first computing system, establishing a connection (e.g., a session) to the first computing system to display the desktop of the first computing system on the second computing system, and then manually initiating execution of the application via the displayed desktop of the first computing system.